package org.huangrui.spark.java.core.rdd.operate;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

import java.util.Arrays;
import java.util.List;

/**
 * @Author hr
 * @Create 2024-10-16 22:19
 */
public class Spark03_Operate_Transform_Filter {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("spark");
        JavaSparkContext jsc = new JavaSparkContext(conf);
        List<Integer> nums = Arrays.asList(1, 2, 3, 4);
        JavaRDD<Integer> rdd = jsc.parallelize(nums, 2);
        // TODO RDD的转换方法：filter(过滤)
        //      RDD可以根据指定的过滤规则对数据源中的数据进行筛选过滤
        //      如果满足规则（返回结果true），那么数据保留，如果不满足规则（返回结果false），那么数据就会丢弃
        /*JavaRDD<Integer> filter = rdd.filter(new Function<Integer, Boolean>() {
            public Boolean call(Integer v1) throws Exception {
                return v1 % 2 == 0;
            }
        });*/
        // Map => A(String) -> B(User, List, Int)
        // Filter => A ->
        // filter方法在执行过程中可能会出现数据倾斜的情况，需要慎重考虑使用
        JavaRDD<Integer> filter = rdd.filter(x -> x % 2 == 0);
        filter.collect().forEach(System.out::println);
        jsc.close();
    }
}
